package ltd.hxya.novel.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import ltd.hxya.novel.common.bean.Result;
import ltd.hxya.novel.user.entity.User;
import ltd.hxya.novel.user.entity.dto.*;
import ltd.hxya.novel.user.utils.rest.RestResp;
import ltd.hxya.novel.user.vo.UserInfoVo;
import ltd.hxya.novel.user.vo.UserVo;

import java.io.IOException;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hxya
 * @since 2022-09-13
 */
public interface IUserService extends IService<User> {


    Map<String, String> verifyCode() throws IOException;


    UserInfoVo userInfo();

    Page<User> getUserList(User user);


    User userInfo(String userId);

    void changeStatus(User user);

    void addUser(User user);

    void updateUser(User user);

    void updatePassword(String id, String password);

    /**
     * 获取图片验证码接口
     * 把图片存在了redis中，并且设置了时间
     * @return
     * @throws IOException
     */
    Result<ImgVerifyCodeRespDto> getImgVerifyCode();

    /**
     * 用户注册
     *
     * @param dto 注册参数
     * @return JWT
     */
    Result<UserRegisterRespDto> register(UserRegisterReqDto dto);

    /**
     * 用户登录的处理过程
     * @param dto
     * @return  JWT + 名称
     */
    Result<UserLoginRespDto> login(UserLoginReqDto dto);

    /**
     * 用户信息查询
     * @param id 用户ID
     * @return 用户信息
     */
    Result<UserInfoRespDto> getUserInfo(String id);

    /**
     * 用户信息修改
     *
     * @param dto 用户信息
     * @return void
     */
    Result<Void> updateUserInfo(UserInfoUptReqDto dto);
}
